Timeout এবং Exception Handling এর জন্য RestTemplate কনফিগারেশন

Java Technologies - স্প্রিং বুট ক্লায়েন্ট (Spring Boot Client) RestTemplate এর কনফিগারেশন |
90
90

স্প্রিং বুটে RestTemplate কনফিগার করার সময় টাইমআউট এবং এক্সসেপশন হ্যান্ডলিং যুক্ত করার জন্য কাস্টম কনফিগারেশন প্রয়োজন। নিচে এই কনফিগারেশন এবং হ্যান্ডলিংয়ের উদাহরণ তুলে ধরা হলো:

RestTemplate-এর জন্য টাইমআউট কনফিগার করার সময় HttpComponentsClientHttpRequestFactory ব্যবহার করা হয়। এটি কানেকশন টাইমআউট এবং রিড টাইমআউট সেট করার জন্য ব্যবহৃত হয়।

import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;

import java.time.Duration;

@Configuration
public class RestTemplateConfig {

    @Bean
    public RestTemplate restTemplate() {
        HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();

        // Set connection timeout (milliseconds)
        factory.setConnectTimeout(5000);

        // Set read timeout (milliseconds)
        factory.setReadTimeout(5000);

        return new RestTemplate(factory);
    }
}

টাইমআউটের জন্য পুলিং সংযোগ ব্যবহারের উদাহরণ

পুলিং কানেকশন ব্যবহারের মাধ্যমে টাইমআউট এবং কার্যকারিতা উন্নত করা যায়:

@Bean
public RestTemplate restTemplateWithPooling() {
    PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager();
    connectionManager.setMaxTotal(100); // সর্বোচ্চ ১০০ কানেকশন
    connectionManager.setDefaultMaxPerRoute(20); // প্রতি রাউটে সর্বোচ্চ ২০ কানেকশন

    CloseableHttpClient httpClient = HttpClients.custom()
            .setConnectionManager(connectionManager)
            .build();

    HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(httpClient);
    factory.setConnectTimeout(5000); // কানেকশন টাইমআউট
    factory.setReadTimeout(5000);    // রিড টাইমআউট

    return new RestTemplate(factory);
}

Exception Handling

REST API কল করার সময় ত্রুটি হ্যান্ডল করার জন্য RestTemplate-এ কাস্টম ResponseErrorHandler ব্যবহার করা যায়। এটি ত্রুটিপূর্ণ HTTP রেসপন্স হ্যান্ডল করতে ব্যবহৃত হয়।

উদাহরণ:

import org.springframework.http.client.ClientHttpResponse;
import org.springframework.web.client.DefaultResponseErrorHandler;
import org.springframework.web.client.RestClientException;
import org.springframework.web.client.RestTemplate;

import java.io.IOException;

public class CustomResponseErrorHandler extends DefaultResponseErrorHandler {

    @Override
    public void handleError(ClientHttpResponse response) throws IOException {
        // Custom error handling logic
        if (response.getStatusCode().is4xxClientError()) {
            throw new RestClientException("Client Error: " + response.getStatusCode());
        } else if (response.getStatusCode().is5xxServerError()) {
            throw new RestClientException("Server Error: " + response.getStatusCode());
        } else {
            super.handleError(response);
        }
    }
}

এই কাস্টম হ্যান্ডলার RestTemplate-এ যুক্ত করুন:

@Bean
public RestTemplate restTemplate() {
    RestTemplate restTemplate = new RestTemplate();
    restTemplate.setErrorHandler(new CustomResponseErrorHandler());
    return restTemplate;
}

Exception Handling Controller Advice

আপনার অ্যাপ্লিকেশনের সব REST কলের জন্য @ControllerAdvice ব্যবহার করে গ্লোবাল এক্সসেপশন হ্যান্ডল করতে পারেন:

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;

@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(RestClientException.class)
    public ResponseEntity<String> handleRestClientException(RestClientException ex) {
        return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("Error: " + ex.getMessage());
    }

    @ExceptionHandler(Exception.class)
    public ResponseEntity<String> handleGeneralException(Exception ex) {
        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("An error occurred: " + ex.getMessage());
    }
}

পূর্ণ উদাহরণ

কাস্টম টাইমআউট এবং এক্সসেপশন হ্যান্ডলিংসহ RestTemplate কনফিগার:

@Configuration
public class RestTemplateConfig {

    @Bean
    public RestTemplate restTemplate() {
        HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();
        factory.setConnectTimeout(5000); // কানেকশন টাইমআউট
        factory.setReadTimeout(5000);    // রিড টাইমআউট

        RestTemplate restTemplate = new RestTemplate(factory);
        restTemplate.setErrorHandler(new CustomResponseErrorHandler());
        return restTemplate;
    }
}

এইভাবে আপনি RestTemplate-এর জন্য টাইমআউট এবং এক্সসেপশন হ্যান্ডলিং কনফিগার করতে পারবেন। এটি আপনার ক্লায়েন্ট অ্যাপ্লিকেশনকে আরও স্থিতিশীল এবং রিলায়েবল করবে।

Content added By
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion